perm filename CONVX.FAI[IRC,LCS] blob
sn#493212 filedate 1980-01-17 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT AND CLIPS*****
C00014 ENDMK
Cā;
; THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT AND CLIPS*****
TITLE CONV
INTERNAL GET,NVECT
EXTERNAL IARRAY,SGZ
CH3ā15 ; SGZ=SEGMENT NUM., SGZ+1=SIZE FACTOR (FOR DISPLACEMENT)
N: 0
ZSHIFT: 0
XSHIFT: 0 ;THESE FOR VERSATEC ROTATION
WSHIFT: =178 ;PAPER PRINTS "SIDEWAYS". THIS CENTERS STANDARD STAFF.
YSHIFT: 0
I: 0
J: 0
K: 0
BOT: 0 ;BOTTOM OF CLIPPED AREA (200) or (-200)
TOP: 0 ;TOP OF CLIPPED AREA (600)
SEGSZ: =800 ;DOES 4 INCH SEGMENT FOR NOW
TOPX: =600
GET: OUTSTR[ASCIZ/FILE NAME (DEFAULT=PLT) /]
INCHWL 1
CAIN 1,15 ; LOOK FOR CR.
JRST DFAULT
SETZM DIR ; THE FILE NAME WILL BE HERE.
SKIPA 2,[POINT 6,DIR]
GOT: INCHWL 1
CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
JRST DONE
SUBI 1,40
IDPB 1,2
JRST GOT
DFAULT: MOVE 1,[SIXBIT/PLT/]
MOVEM 1,DIR
DONE: INIT CH3,17
SIXBIT/DSK/
0
0
MOVE 0,[SIXBIT/PLT/]
MOVEM 0,DIR+1
SETZM DIR+2
SETZM DIR+3
LOOKUP CH3,DIR
HALT ;DID NOT FIND FILE
SETZM DIR+1
; MOVE 1,SGZ+2 ;GET BIG SHIFT (TEMPORARY FEATURE ?)
; SKIPE 1
; SOJ 1,
; IMULI 1,=1700 ;SHIFT=(ISHIFT-1)*1700
MOVE SEGSZ
SKIPN 2,SGZ+2 ;IS THERE A SEGMENT SIZE?
JRST SGX ;NO
FMPRI 2,(200.0)
FIX 0,2 ;CHANGE INCHES TO STEPS (200/INCH)
SGX: MOVEM SEGX#
SKIPE 2,SGZ+1 ;GET SIZE FACT.
FSBRI 2,(1.0) ;YSHIFT=(SZFAC-1)*850+178
FMPR 2,[850.0]
FIX 2,2
SKIPE 1,SGZ ;GET SEGMENT NUMBER SEG 0 IS SAME AS SEG 1.
SOJ 1, ;SEG=600-(SEG-1)*800
IMUL 1,SEGX ;SEGSZ FOR NOW=800
SUB 1,WSHIFT
SUB 1,2 ;ADD IN FROM ABOVE
MOVNM 1,YSHIFT
TTOP: MOVE TOPX
MOVEM TOP ;TOP=600, BOT=-200 FOR NOW
SUB SEGX ;SUBTRACT SEGMENT SIZE (4 INCHES FOR NOW)
MOVEM BOT
SETZM N ;FOR CLIPPER
MOVE ZSHIFT
MOVEM XSHIFT ;FOR RE-STARTS
SETZ 10, ;FLIP-FLOP FOR CONSECUTIVE INVIS. VECTS.
SETO 15, ;INITIALIZE XSHIFT (REALLY YSHIFT BECAUSE ROTATED.)
SETOM PREV ;INITIALIZE FLAG FOR SKIPPING UNNEEDED INVISIBILES.
SETZM IARRAY ;ZERO 1ST WORD.
MOVEI 11,1 ;MAIN ARRAY COUNTER(FILL IN 1ST 2 WORDS AT END)
INP: HRRZI 0,M
SUBI 0,1
MOVEM 0,COM
MOVNI 0,=128
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
MOVEI 6,1 ;COUNTER
LUP: MOVEI 5,M
ADDI 5,(6)
MOVE 2,(5) ; UNPAC ROUTINE
LSHC 2,-10 ; 14 BITS, 14 BITS, 8 BITS
ASH 3,-34
JUMPE 3,NOVEC ;IF(PEN.EQ.0)GO TO NOVEC START OF 128 WD SEGMENT.
MOVE 7,3 ;MOVEM 3,K KEEP IT FOR 11/40 CONVERSION
LSHC 2,-16
ASH 3,-26
MOVEM 3,J
LSHC 2,-16
ASH 3,-26
MOVEM 3,I
MOVEI 12,106 ;VISIBLE PACKS IN 11/40 FORMAT
CAIN 7,2
JRST VVV
JUMPG 7,SHIFT ;IS IT -3??
AOJLE 15,SHFT1 ;AOJ 15, ; YES
;; JUMPLE 15,MORE ; SKIP FIRST TIME IT HAPPENS
MOVE J ; GET SHIFT FOR NEXT ORIGINAL INPUT FILE
SHFT2: ADDM XSHIFT ; UPDATE SHIFT (FIRST TIME IT'S ZERO)
JRST MORE
SHFT1: MOVNI =512 ;FIRST TIME SUBTRACT 512 FROM SHIFT
ADD J
JRST SHFT2
SHIFT: CAME 7,PREV# ;ARE THERE 2 3'S IN A ROW?
JRST SHFT3 ;NO
SKIPGE N ;IF(N.LT.0)SKIP THIS NEXT. N CAN BE 0,1,-1
JRST SHFT3
SKIPN 10 ;DID WE DO THIS ALREADY?
SOJ 11, ;NO, OMIT LAST ONE BY DECREMENTING COUNTER
SETO 10, ; =-1 SO WE DON'T DO 2 INVIS. IN A ROW
JRST MORE ;****** SKIP NEXT IF REPEATING ITSELF.
SHFT3: MOVEI 12,146 ;INVISIBLE
SKIPA
VVV: SETZ 10, ;RESET FLIP-FLOP
MOVEM 7,PREV ;SAVE PEN INFO FOR NEXT TIME AROUND
MOVE 13,J ;JSA 16,PLOT
ADD 13,XSHIFT ;***** X AND Y ARE ROTATED -90 DEG. ON VERSATEC!!!
MOVN 14,I ;JUMP I PACKS BITS - 11,11,14
SUB 14,YSHIFT ;NEEDED Y SHIFT FOR PLOT.SAV (VERSATEC CONV. PROG.)
;; ABOVE 2 CAUSE -90 DEG. ROTATION. MOVE 13,I ;JSA 16,PLOT
;; MOVE 14,J ;JUMP I PACKS BITS - 11,11,14
MOVEI 16,CLPX ;LOC. OF ARGS. FOR CLIPPER
PUSHJ 17,CLIP
SKIPGE N ;IF(N.LT.0)WAIT TIL NEXT VECTOR FOR CLIPPED POS.
JRST MORE
VEC1: DPB 13,[POINT 11,12,10] ;JUMP J
DPB 14,[POINT 11,12,21] ;JUMP K
AOJ 11,
MOVEM 12,IARRAY(11) ;CAMGE 6,M
;XXX NOT NEEDED IF NOVEC TRAP IS OK. CAMG 6,M
MORE: AOJA 6,LUP
NOVEC: MOVE 2,M
CAIN 2,=127
JRST INP
;; CAIE 7,2 ;WAS LAST VECTOR VISIBLE OR NOT?
;; SOJ 11, ;NO, SO DELETE IT. (BACKUP ONE WORD.)
;; SOJ 11, ;PUT A 0 WORD, THEN TOTAL WORD-COUNT LESS 2
MOVEM 11,IARRAY+1 ;INTO 2ND WORD. THEN EXIT
OUTSTR[ASCIZ/WRITING P.PLT
/]
POPJ 17,
CLPX: JUMP 13
JUMP 14
JUMP 7
NVECT: MOVEI 4,146 ; NEW VECTOR POINT - FROM CLIP ROUTINE
;; MOVE 1,@2(16) ;VIS. OR INVIS.?
;; CAIE 1,2
;; MOVEI 4,106 ;VIS.
MOVE 1,@(16) ;GET NEW J
MOVE 2,@1(16) ;GET NEW K
VEC2: DPB 1,[POINT 11,4,10] ;JUMP J
DPB 2,[POINT 11,4,21] ;JUMP K
AOJ 11,
MOVEM 4,IARRAY(11)
POPJ 17,
COM: OCT 0,0
BLKNUM: 0
M: BLOCK =128
DIR: BLOCK 4
;MC: =200 ; SUBROUTINE CLIP(J,K,L)
;NC: =600 ;C (AC13,AC14,AC7)
CLIP: MOVE @(16) ;COMMON /JCLIP/MC,NC,N
MOVEM J# ;C ASSUMES N IS INITIALIZED =0
MOVE 5,@1(16) ; K IF(L.NE.3)GO TO 1
MOVE 3,KK
MOVE @2(16) ;DATA MC/-824/,NC/-424/
CAIE 3 ;IF(K.LT.MC.OR.K.GE.NC)GO TO 40
JRST CL1 ;C NOW INBOUNDS
SETZM N
CAML 5,BOT ; N=0
CAML 5,TOP ; GO TO 4
SETOM N ;1 IF(N.EQ.0)GO TO 11
;C JUMP IF LAST POINT WAS IN BOUNDS
JRST CL4 ;C NOW JJ IS OUT OF BOUNDS, CLIP IT
CL1: MOVEM 16,AC16#
SKIPN N ;5 IF(K.LT.MC.AND.KK.LT.MC)GO TO 9
JRST CL11 ; IF(K.GE.NC.AND.KK.GE.NC)GO TO 9
CAMGE 5,BOT ;C GO BACK IF ENTIRE SEGMENT IS OUT OF BOUNDS
CAML 3,BOT ;6 CALL CL(JJ,KK,J,K,JJ,KK)
SKIPA
JRST CL9 ;C CLIP FROM INVIS VECT WHICH IS OUT OF BOUNDS OR V-V
CAML 5,TOP ; CALL NVECT(JJ,KK)
CAMGE 3,TOP ;C GO PUT AWAY CLIPPED VECTOR POINT, THEN NEW POINT
SKIPA ;C CLIP MORE IF OTHER POINT IS ALSO OUT.
JRST CL9 ; IF(K.LT.MC.OR.K.GE.NC)GO TO 7
MOVEI 16,CX6 ;
PUSHJ 17,CL
PUSHJ 17,NVECT
;; CAML 5,MC ;11 IF(K.LT.MC.OR.K.GE.NC)GO TO 7
;; CAML 5,NC ; N=0
;; JRST CL7 ; GO TO 4
;; JRST CL4 ;9 N=-1
CL11: CAML 5,BOT ;4 JJ=J
CAML 5,TOP ; KK=K
JRST CL7 ;C REMEMBER THE COORDS.
SETZM N ; RETURN
SKIPA ;7 CALL CL(J,K,JJ,KK,J,K)
CL9: SETOM N ; AFTER 7 CHANGED!
CL4: MOVE 4,J ;
CX4: MOVEM 4,JJ# ; GO TO 4
MOVEM 5,KK# ;40 N=-1
POPJ 17, ; GO TO 4
CL7: MOVEI 16,CX7 ; END
PUSHJ 17,CL
MOVE 16,AC16
MOVE @(16) ;JJ=J
MOVEM JJ
MOVE @1(16) ;KK=K
MOVEM KK
MOVEM 4,@(16)
MOVEM 5,@1(16)
MOVEI 1
MOVEM N ;N=1
POPJ 17, ;JRST CX4
CX6: JUMP JX#
JUMP KX#
CX7: JUMP J
JUMP 5
JUMP JJ
JUMP KK
JUMP J
JUMP 5
CL: MOVE TOP ; SUBROUTINE CL(JX,KX,J,K,JJ,KK)
SOS ;C RETURN -- IN -- OUT
MOVE 1,@5(16) ; COMMON /JCLIP/MC,NC
CAMGE 1,TOP ;C JJ,KK=OLD POINT J,K=NEW POINT JX,KX=CLIPPED
MOVE BOT ; KX=NC-1
MOVEM @1(16) ; IF(KK.LT.NC)KX=MC
SUB 1,@3(16) ;C JUMP IF OFF TOP OF AREA
FLTR 1,1
MOVE 4,@4(16) ;C NOW IT'S OFF BOTTOM OF AREA
SUB 4,@2(16) ;1 A=KK-K
SUB @3(16) ; B=(JJ-J)*(KX-K)
IMUL 4,0 ; C=B/A
FLTR 4,4
FDVR 4,1 ; JX=J+C
FIX 4,4 ;C NOW THE VECT. IS FROM KX,JX TO J,K -- ALL INBOUNDS.
ADD 4,@2(16) ; END
MOVEM 4,@(16) ;AC4 HAS JX, AC0 HAS KX
POPJ 17,
END